.TH std::make_move_iterator 3 "2024.06.10" "http://cppreference.com" "C++ Standard Libary"
.SH NAME
std::make_move_iterator \- std::make_move_iterator

.SH Synopsis
   Defined in header <iterator>
   template< class Iter >                                            \fI(since C++11)\fP
   std::move_iterator<Iter> make_move_iterator( Iter i );            \fI(until C++17)\fP
   template< class Iter >                                            \fI(since C++17)\fP
   constexpr std::move_iterator<Iter> make_move_iterator( Iter i );

   make_move_iterator is a convenience function template that constructs a
   std::move_iterator for the given iterator i with the type deduced from the type of
   the argument.

.SH Parameters

   i - input iterator to be converted to move iterator

.SH Return value

   A std::move_iterator which can be used to move from the elements accessed through i.

.SH Possible implementation

   template<class Iter>
   constexpr std::move_iterator<Iter> make_move_iterator(Iter i)
   {
       return std::move_iterator<Iter>(std::move(i));
   }

.SH Example


// Run this code

 #include <iomanip>
 #include <iostream>
 #include <iterator>
 #include <list>
 #include <string>
 #include <vector>

 auto print = [](auto const rem, auto const& seq)
 {
     for (std::cout << rem; auto const& str : seq)
         std::cout << std::quoted(str) << ' ';
     std::cout << '\\n';
 };

 int main()
 {
     std::list<std::string> s{"one", "two", "three"};

     std::vector<std::string> v1(s.begin(), s.end()); // copy

     std::vector<std::string> v2(std::make_move_iterator(s.begin()),
                                 std::make_move_iterator(s.end())); // move

     print("v1 now holds: ", v1);
     print("v2 now holds: ", v2);
     print("original list now holds: ", s);
 }

.SH Possible output:

 v1 now holds: "one" "two" "three"
 v2 now holds: "one" "two" "three"
 original list now holds: "" "" ""

   Defect reports

   The following behavior-changing defect reports were applied retroactively to
   previously published C++ standards.

      DR    Applied to              Behavior as published              Correct behavior
   LWG 2061 C++11      make_move_iterator did not convert array        made to convert
                       arguments to pointers

.SH See also

   move_iterator iterator adaptor which dereferences to an rvalue
   \fI(C++11)\fP       \fI(class template)\fP
   move          obtains an rvalue reference
   \fI(C++11)\fP       \fI(function template)\fP
